数值数据的表示方法


[toc]

1. 原码表示法

$[X]_原 = \left\{\begin{aligned}\begin{equation} X,\qquad 2^n > X\ge 0 \\ 2^n-X, 0\ge X>-2^n \end{equation}\end{aligned} \right.$

其中n为小数点前的位数,小数时n=0

2. 补码表示法

:一个字长为n+1位的纯整数的溢出量为$2^{n+1}$,即是以$2^{n+1}$模。一个纯小数的溢出量为2

同余:两个整数A,B除于同一个整数M,所得余数相同,称A和B对模M同余

只要确定了一个模,就可以找到一个与负数等价的正数来替代此负数,而这个正数可以用模加上负数本身求得,这样就可把减法运算用加法实现了

$[X]_补 =\left\{\begin{aligned}\begin{equation} X,\qquad\qquad 1 > X \ge 0 \\ 2^{n+1} + X,\quad 0 > X \ge -1(mod2) \end{equation}\end{aligned}\right.$

小数n=0

补码快捷方式:数值部分按位取反,末尾加1,符号位不变

表示范围:字长为n+1位的机器,补码定点整数表示范围是$-2^n\sim2^n-1$. 定点小数的-1补码表示为1.0000. # 3. 定点表示法 小数点的位置固定为最高有效位之前,符号位之后,记为$X_s.X_1X_2...X_n$ 定点小数的小数点位置是隐含约定的,并不需要真正的占据一个二进制位 当$X_s = 0$ 由$.X_1X_2...X_n$都为1时为最大正数 **定点小数的最大正数为**:$X_{最大正数} = (1 - 2^{-n})$ 由$.X_1X_2...X_n都为0时为最小正数$ **定点小数的最小正小数为**:$ X_{最小正数}=2^{-n}$ --- 当$X_s = 1$ 原码表示中由$.X_1X_2...X_n都为1时为最小负数$

原码表示定点小数最小负数为$X_{最小负数} = -(1-2^{-n})$

补码表示中由$.X_1X_2...X_n$都为0时为最小负数

补码表示定点小数的最小负数为$X_{最大负数} = -1$

整数和上面同理

在这里,为什么最大负数为-1?,在补码中,零具有唯一确定性,补码比原码少一个-0的表示,多一个-1的表示以及整数表示范围多了一个$-2^{n}$

4. 移码

由于补码很难直接判断真值大小,因为如果一个负数和正数比较会出现$[+21]_{补}=010101$和$[-21]_{补}=101011$比较出现$010101$小于$101011$的结果,然而实际上真值是$+21$大于$-21$,此时我们可以将所有的数往正数方向偏移一定的量,使得负数为正,再来比较数值的就不会出错

$[X]_{移} = 2^n + X(2^n>X\ge -2^n)$

$[X]_{移} = [X]_{补} + 2^n$

移码的表示范围:机器字长为n+1的计算机,移码定点整数的表示范围为$-2^n\sim(2^n-1)$

移码与补码:真值部分相同,最高位相反

5. 浮点数的表示方法

二进制N的浮点数的一般表示为$N=M*2^E$,其中E为阶码(用二进制数表示),M为尾数或有效位

浮点数的机器码表示

S(尾数M的符号位) E_f(阶码E的符号位) E(阶码) M(尾数)

5.1 规格化浮点数

浮点数的基数为2,如果位数满足$2^{-1}\le|M|<1$,则称该浮点数为规格化浮点数

例如:十进制数-78,求它的规格化浮点数

$(-78)_{10}=(-1001110)_2 = -0.1001110*2^7$

则它的规格化浮点数为$-0.1001110*2^{111}$

如果阶码用移码5位表示,则$[+111] = [10000 + 111]_{移码}=[10111]移码$,其中阶码为0111,符号位为1

尾数用补码表示,且浮点数机器码共16位,则$[-0.1001110000]=[1.0110010000]_{补码}$,其中尾数0110010000,符号位为1

则规格化机器码表示为1\1\0111\0110010000